package com.clusterswisdom.horn.api.tmall.action.trade;

import java.util.Arrays;
import java.util.Date;
import java.util.List;

import com.alibaba.fastjson.JSONObject;
import com.clusterswisdom.horn.api.exception.HornApiException;
import com.clusterswisdom.horn.api.ioc.HornAction;
import com.clusterswisdom.horn.api.ioc.HornResponse;
import com.clusterswisdom.horn.api.ioc.api.ApiConfig;
import com.clusterswisdom.horn.api.tmall.TmallInstance;
import com.clusterswisdom.horn.api.tmall.action.AbstractTmallAction;
import com.taobao.api.domain.Order;
import com.taobao.api.domain.Trade;
import com.taobao.api.response.TradeFullinfoGetResponse;

public class FetchTOrderAction extends AbstractTmallAction implements HornAction{

	@Override
	public HornResponse execute(ApiConfig config, JSONObject param) throws Exception {
		TradeFullinfoGetResponse response =  (TradeFullinfoGetResponse) TmallInstance.getInstance().executeRequest(param, "trade", "tradeFullinfoGet");
		
		if (response.isSuccess()) {
			return new HornResponse(true, response.getTrade());
			
		} else {
			return getUnsuccessResponse(response);
			
		}
//		return new HornResponse(true, getTextTrade());
	}
	
	/**
	 * 
	 * <field name="tid" type="Number" note="交易编号 (父订单的交易编号)" />
			<field name="status" type="String" note="交易状态。可选值: * TRADE_NO_CREATE_PAY(没有创建支付宝交易) * WAIT_BUYER_PAY(等待买家付款) * SELLER_CONSIGNED_PART(卖家部分发货) * WAIT_SELLER_SEND_GOODS(等待卖家发货,即:买家已付款) * WAIT_BUYER_CONFIRM_GOODS(等待买家确认收货,即:卖家已发货) * TRADE_BUYER_SIGNED(买家已签收,货到付款专用) * TRADE_FINISHED(交易成功) * TRADE_CLOSED(付款以后用户退款成功，交易自动关闭) * TRADE_CLOSED_BY_TAOBAO(付款以前，卖家或买家主动关闭交易) * PAY_PENDING(国际信用卡支付付款确认中) * WAIT_PRE_AUTH_CONFIRM(0元购合约中)" />
			<field name="created" type="Date" note="交易创建时间。格式:yyyy-MM-dd HH:mm:ss" />
			<field name="total_fee" type="String" note="商品金额（商品价格乘以数量的总金额）。精确到2位小数;单位:元。如:200.07，表示:200元7分" />
			<field name="received_payment" type="String" note="卖家实际收到的支付宝打款金额（由于子订单可以部分确认收货，这个金额会随着子订单的确认收货而不断增加，交易成功后等于买家实付款减去退款金额）。精确到2位小数;单位:元。如:200.07，表示:200元7分" />
			<field name="discount_fee" type="String" note="建议使用trade.promotion_details查询系统优惠 系统优惠金额（如打折，VIP，满就送等），精确到2位小数，单位：元。如：200.07，表示：200元7分" />
			<field name="alipay_no" type="String" note="支付宝交易号，如：2009112081173831" />
			<field name="pay_time" type="Date" note="付款时间。格式:yyyy-MM-dd HH:mm:ss。订单的付款时间即为物流订单的创建时间" />
			<field name="buyer_alipay_no" type="String" note="买家支付宝账号" />
			<field name="buyer_nick" type="String" note="买家昵称" />
			<field name="receiver_mobile" type="String" note="收货人的手机号码" />
			<field name="buyer_email" type="String" note="买家邮件地址" /> 
			<field name="trade_from" type="String" note="交易内部来源。 WAP(手机);HITAO(嗨淘);TOP(TOP平台);TAOBAO(普通淘宝);JHS(聚划算) 一笔订单可能同时有以上多个标记，则以逗号分隔" />
			<field name="buyer_email" type="String" note="买家邮件地址" />
			<field name="orders" type="List" note="订单列表" />
	 * 
	 * @return
	 */
	private Trade getTextTrade() {
		Trade trade = new Trade();
		trade.setTid(2231958349l);
		trade.setStatus("TRADE_NO_CREATE_PAY");
		trade.setCreated(new Date());
		trade.setTotalFee("99.05");
		trade.setReceivedPayment("33.00");
		trade.setDiscountFee("77.00");
		trade.setAlipayNo("2009112081173831");
		trade.setPayTime(new Date());
		trade.setBuyerAlipayNo("3424626");
		trade.setBuyerNick("ssd");
		trade.setReceiverMobile("13333333444");
		trade.setBuyerEmail("qq@qq.com");
		trade.setTradeFrom("WAP");
		trade.setBuyerEmail("ww@qq.com");
		trade.setOrders(getOrderList());
		trade.setNum(1l);
		
		return trade;
	}
	
	/**
	 * <field name="oid" type="Number" note="子订单编号" />
		<field name="status" type="String" note="订单状态" />
		<field name="refund_status" type="String" note="退款状态。退款状态" />
		<field name="num_iid" type="Number" note="商品数字ID" />
		<field name="productName" type="String" note="产品名称（规格）" />
		<field name="title" type="String" note="商品标题" />
		<field name="discount_fee" type="String" note="子订单级订单优惠金额。精确到2位小数;单位:元。如:200.07，表示:200元7分" />
		<field name="total_fee" type="String" note="应付金额（商品价格 * 商品数量 + 手工调整金额 - 子订单级订单优惠金额）。精确到2位小数;单位:元。如:200.07，表示:200元7分" />
		<field name="num" type="Number" note="购买数量。取值范围:大于零的整数" />

	 * @return
	 */
	private List<Order> getOrderList() {
		Order order = new Order();
		order.setOid(2231958349l);
		order.setStatus("TRADE_NO_CREATE_PAY");
		order.setRefundStatus("WAIT_SELLER_AGREE");
		order.setNumIid(2342344l);
		order.setTitle("山寨版测试机器");
		order.setDiscountFee("22.05");
		order.setTotalFee("33.00");
		order.setNum(2l);
		
		return Arrays.asList(new Order[]{order});
	}
}